@file:Suppress("unused")

package com.hjh.tool.extension

import android.graphics.BitmapFactory
import android.util.Base64
import android.widget.ImageView
import com.bumptech.glide.Glide
import com.bumptech.glide.load.engine.DiskCacheStrategy
import com.bumptech.glide.request.RequestOptions
import com.elvishew.xlog.XLog
import jp.wasabeef.glide.transformations.RoundedCornersTransformation
import jp.wasabeef.glide.transformations.RoundedCornersTransformation.CornerType
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import kotlin.text.contains
import kotlin.text.split
import com.hjh.res.R

/**
 * @author： hjh
 * @createDate： 2024/12/18 9:57
 * @description：
 * @qq： 3472903821
 * @version: 1.0
 */
fun ImageView.loadBase64(base64String: String) {
    CoroutineScope(Dispatchers.Main).launch {
        try {
            // 检查并去掉 Base64 前缀（如果存在）
            val base64Image =
                if (base64String.contains(",")) base64String.split(",")[1]
                else base64String

            // 解码 Base64 字符串在 IO 线程中完成
            val bitmap = withContext(Dispatchers.IO) {
                val decodedBytes = Base64.decode(base64Image, Base64.DEFAULT)
                BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.size)
            }

            // 在主线程更新 UI
            if (bitmap != null) {
                Glide.with(this@loadBase64.context)
                    .load(bitmap)
                    // .diskCacheStrategy(DiskCacheStrategy.NONE)
                    .skipMemoryCache(true)
                    .into(this@loadBase64)
            } else {
                XLog.e("解码Base64失败，无法生成 Bitmap")
            }
        } catch (e: Exception) {
            e.printStackTrace()
            XLog.e("异步加载 Base64 图片失败：${e.message}")
        }
    }
}

/**
 * Glide加载图片，可以指定圆角弧度。
 *
 * @param url 图片地址
 * @param round 圆角，单位dp
 * @param cornerType 圆角角度
 */
fun ImageView.load(
    url: String,
    round: Float = 0.0F,
    cornerType: CornerType = CornerType.ALL
) {
    if (round == 0.0F) {
        Glide.with(this.context).load(url).preload()
    } else {
        val options = RequestOptions.bitmapTransform(
            RoundedCornersTransformation(round.dpToPx(), 0, cornerType)
        ).placeholder(
            R.drawable.shape_album_loading_bg
        ).diskCacheStrategy(DiskCacheStrategy.NONE)
        Glide.with(this.context).load(url).apply(options).preload()
    }
    Glide.with(this.context).load(url).into(this)
}

/**
 * Glide加载图片，可以定义配置参数。
 *
 * @param url 图片地址
 * @param options 配置参数
 */
fun ImageView.load(url: String, options: RequestOptions.() -> RequestOptions) {
    Glide.with(this.context).load(url).apply(RequestOptions().options()).into(this)
}